<?php

  /**
  * FR_Module
  *
  * Dette er den grundl�ggende base for alle moduler.
  * Alle moduler udvider herfra.
  */
  
  
  abstract class FR_Module extends FR_Object
  {
      /**
      * $data
      *
      * Det data som skal videre til Presenter (VIEW)
      * 
      */
      protected $data = array();

      
      /**
      * $presenter
      *
      * Sætter default presenter.
      * 
      */
      private $presenter = '';
      
      public function getPresenter(){
          return $this->presenter;
      }
      
      /**
      * $name
      *
      * @var string $name Navnet p� modulklassen
      */
      public $name;

      /**
      * $tplFile
      *
      * @var string $tplFile Navnet p� template-filen
      */
      private $tplFile;

      public function getTplFile(){
          return $this->tplFile;
      }
      
      public function renderPHTML($tpl){
          $this->presenter = "php";
          $this->tplFile = str_ireplace(".phtml", "", $tpl).".phtml";
      }
      
      public function renderJSON(){
          $this->presenter = "json";
      }
      
      public function renderXML(){
          $this->presenter = "xml";
      }
      
      /**
      * $moduleName
      *
      * @var string $moduleName Navnet p� det efterspurgte modul
      */
      public $moduleName = null;
     
      /**
      * __construct
      * 
      * @author Joe Stump <joe@joestump.net>
      */
      
      
      public function __construct()
      {
          parent::__construct();
          $this->name = $this->me->getName();
          $this->tplFile = $this->name.'.phtml';
      }
      
      
      /**
      * __default
      *
      * Denne function kaldes, hvis ingen EVENT er efterspurgt.
      */
      //abstract public function __default();
      
      /**
      * set
      *
      * S�tter data, der skal videref�res til Presenter (VIEW)
      * 
      */
      protected function set($var,$val) {
          $this->data[$var] = $val; 
      }
      
      protected function setFromArray($array){
          if (is_array($array)){
              foreach (array_keys($array) as $a){
                  $this->data[$a] = $array[$a]; 
              }
          }else{
              return false;
          }
      }
    
      
      /**
      * getData
      *
      * Returnerer modulets data. 
       */
      public function getData()
      {
          return $this->data;
      }
      
      
      
      /**
      * isValid
      *
      * Afg�r om moduler er validt til at k�re.
      * Hvis det udvider fra FR_Module og FR_Auth s� er det ok.
      * 
      */
      public static function isValid($module)
      {
          return (is_object($module) && 
                  $module instanceof FR_Module);
      }
      
      
      
      public function __destruct()
      {
          parent::__destruct();
      }
      
  }
